<?php
/**
 * This file is loaded automatically by the app/webroot/index.php file after the core bootstrap.php
 *
 * This is an application wide file to load any function that is not used within a class
 * define. You can also use this to include or require any files in your application.
 *
 * PHP versions 4 and 5
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       cake
 * @subpackage    cake.app.config
 * @since         CakePHP(tm) v 0.10.8.2117
 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
 */

/**
 * Short description for class.
 *
 * Add your application-wide methods in the class below, your controllers
 * will inherit them.
 *
 * @package       cake
 * @subpackage    cake.app
 */
class AppController extends Controller {

    var $paginate = array('limit' => 10, 'page' => 1);
    var $uses = array('Usuario');
    var $parametros = array();
    var $erroBD = '';
    var $paginas_liberadas = array('/login/index','/login/logar','/recebimentos/boleto');
    var $paginas_seguranca = array('/home/index','/login/logout','/usuarios/alterar_senha','/login/sem_permissao');

    /*
     * Verifica se o usuario está logado e pode acessar o controller requisitado
     */
    function checkSession() {
        $usuario = $this->Session->read('GESTAO');

        if ( empty($usuario) ) {
            $this->Session->setFlash(__('Acesso Negado: Sem permissão.', true), 'default', array('tipo' => 'E'), 'mensagem');
            $this->redirect(array('controller' => 'login','action'=>'index'));
        }

        $controller = $this->params['controller'];
        $action = $this->params['action'] == "" ? "index" : $this->params['action'];

        $this->verificarSeguranca($controller, $action, $usuario['security']);

    }

    /*
     * Antes de executar qualquer acao do controller é chamado essa funcao
     * que executa tarefas de validacao
     */
    function beforeFilter() {
        
        $pagina = '/'.$this->params['controller'].'/'.$this->params['action'];
        $localizou = array_search($pagina, $this->paginas_liberadas); // retorna o indice caso encontre o registro

        if( !is_int($localizou) ) {
            $this->checkSession();
            $this->carregaDados();
            $this->carregarMensagens();
        }
    }

    /*
     * Funcao que carrega algumas informacoes para formacao da pagina
     */
    function carregaDados() {
        // Usuario logado
        $usuario_sis = $this->Session->read('GESTAO');

        $this->set('usuario_sistema',$usuario_sis);
        $this->set('usuario_logado',$usuario_sis['Usuario']['nome']);
    }

    /*
     * Padroniza todas as mensagens que sao exibidas ao usuario
     */
    function carregarMensagens() {
        $mensagem['jsSelecionarItem'] = 'É necessário selecionar um item.';
        $mensagem['jsSelecionarSomenteUmItem'] = 'Selecione apenas um item.';
        $mensagem['jsApagarItem'] = 'Deseja realmente excluir o(s) item(ns) selecionado(s)?';
        $mensagem['jsApagarItemUsuario'] = 'Deseja realmente excluir o(s) item(ns) selecionado(s), Será(ão) excluída(s) a(s) Notícia(s) desse(s) Usuário(s)?';
        $mensagem['jsCompararData'] = 'A Data fim tem que ser maior que a data inicio!';
        $mensagem['jsNegacaoApagarItem'] = 'Não é possível excluir o(s) item(ns) selecionado(s)!';
        
        $mensagem['sem_acesso'] = 'Usuário não possui acesso configurado.';

        $this->set('mensagem', $mensagem);
    }
    function teste(){echo 'ok';}
    /**
     * Retorna a data no formato Brasil
     * 
     * @param data datetime
     * @param exibeHora boolean
     */
    function retornaData($data, $exibeHora = false) {
        $aux = explode(" ",$data);
        $aux2 = explode("-",$aux[0]);
        $data = $aux2[2]."/".$aux2[1]."/".$aux2[0];

        if ($exibeHora){
            $data .= ' às '.$aux[1];
        }
        
        return $data;
    }
    
    /**
     * @desc Verifica se apagina solicitada esta liberada para o usuario
     * @param string $controller
     * @param string $action
     * @param array $security 
     */
    function verificarSeguranca($controller, $action, $security){
        
        $url = '/'.$controller.'/'.$action;
        $localizou = array_search($url, $this->paginas_seguranca); // retorna o indice caso encontre o registro

        // Verifica se possui permissao para acessar a pagina solicitada
        if( !is_int($localizou) ) {
            if( !is_int(array_search($url,$security))){
                $this->redirect(array('controller' => 'login','action'=>'sem_permissao'));
            }
        }
        $this->set('security',$security);
        $this->set('controlador',$controller);
    }

}

?>
